//package org.example.springmybatisdemo.exception;
//
//import jakarta.servlet.http.HttpServletRequest;
//import lombok.extern.slf4j.Slf4j;
//import org.example.springmybatisdemo.entity.Result;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//// 异常统一处理
//@Slf4j
//@RestControllerAdvice // 用来捕获控制器controller层抛出来的所有异常
//public class BusinessException {  // 注意：不要继承 RuntimeException
//
//    @Value("${app.debug:false}")
//    private boolean debugMode;
//
//    @ExceptionHandler
//    public Result handleException(Exception e) {
//        log.error("系统异常", e);
//        if (debugMode) {
//            // 开发环境返回详细错误信息
//            StringBuilder errorMsg = new StringBuilder();
//            errorMsg.append("异常信息: ").append(e.getMessage())
//                    .append("\n异常类型: ").append(e.getClass().getSimpleName())
//                    .append("\n请求URI: ").append(getCurrentRequestUri())
//                    .append("\n堆栈信息:\n");
//
//            StackTraceElement[] stackTrace = e.getStackTrace();
//            int maxLines = Math.min(stackTrace.length, 10);
//            for (int i = 0; i < maxLines; i++) {
//                errorMsg.append("  at ").append(stackTrace[i].toString()).append("\n");
//            }
//
//            if (stackTrace.length > maxLines) {
//                errorMsg.append("  ... more");
//            }
//
//            return Result.error(errorMsg.toString());
//        } else {
//            // 生产环境只记录日志，返回通用错误信息给前端
//            return Result.error("出错了，请联系管理员！");
//        }
//    }
//
//    /**
//     * 获取当前请求URI
//     */
//    private String getCurrentRequestUri() {
//        try {
//            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
//            return request.getRequestURI();
//        } catch (Exception ex) {
//            return "unknown";
//        }
//    }
//}
